home *** CD-ROM | disk | FTP | other *** search
- /*
- Copyright© 1994 Mikhail Fridberg. Part of this code is copyrighted by Steve Falkenburg
-
- Telnet-based talk server/client
-
- connection management is done through the use of Operating System queues to simplify tracking
- and usage.
- */
-
- #include <CommResources.h>
- #include <Terminals.h>
- #include <Connections.h>
-
- #include "const.h"
- #include "globals.h"
- #include "utils.h"
- #include "queues.h"
-
- static QHdr gFreeQueue,gCompletedQueue,gConnectedQueue; // our queue header structures
- static MyQElem gBufferPool[kNumBuffers]; // queue storage area is here
-
-
- /* initializes our queue handling scheme */
-
- void InitQueues(void)
- {
- short i;
-
- gFreeQueue.qFlags = 0;
- gFreeQueue.qHead = 0;
- gFreeQueue.qTail = 0;
-
- gCompletedQueue.qFlags = 0;
- gCompletedQueue.qHead = 0;
- gCompletedQueue.qTail = 0;
-
- gFree = kNumBuffers;
- gRunning = gCompleted = 0;
- gServiced = 0;
-
- gConnectedQueue.qFlags = 0;
- gConnectedQueue.qHead = 0;
- gConnectedQueue.qTail = 0;
-
- for (i=0; i<kNumBuffers; i++)
- Enqueue(&gBufferPool[i],&gFreeQueue);
- }
-
-
- /* pulls a parameter block off of the unused queue to be used in a device manager call
- */
-
- MyQElemPtr GetUnusedPBlock(void)
- {
- MyQElemPtr retValue;
-
- retValue = (MyQElemPtr) gFreeQueue.qHead;
- if (retValue) {
- Dequeue(retValue,&gFreeQueue);
- gFree--;
- }
-
- return retValue;
- }
-
-
- /* puts a parameter block back onto the unused queue to be picked up and used by someone else
- */
-
- void RecycleFreePBlock(MyQElemPtr pBlock)
- {
- Enqueue(pBlock,&gFreeQueue);
- gFree++;
- }
-
-
- /* pulls a parameter block off of the completed queue for processing by the caller
- */
-
- MyQElemPtr GetCompletedPBlock(void)
- {
- MyQElemPtr retValue;
-
- retValue = (MyQElemPtr) gCompletedQueue.qHead;
- if (retValue) {
- Dequeue(retValue,&gCompletedQueue);
- gCompleted--;
- }
-
- return retValue;
- }
-
-
- /* queues a parameter block onto the completed queue. this is normally called from completion
- routines at interrupt time.
- */
-
- void StoreCompletedPBlock(MyQElemPtr pBlock)
- {
- Enqueue(pBlock,&gCompletedQueue);
- gCompleted++;
- }
-
-
- void StoreConnectedPBlock(MyQElemPtr pBlock)
- {
- Enqueue(pBlock,&gConnectedQueue);
-
- }
-
- MyQElemPtr GetConnectedPBlock(void)
- {
- return ((MyQElemPtr)(gConnectedQueue.qHead));
-
- }
-
-
-